Cybertrace
Данное руководство описывает быструю настройку интеграции (автоматическую загрузку индикаторов компрометации (IoC)) Solar TI Feeds Agent с Kaspersky Cybertrace.
Предварительные требования
- Установленный и настроенный Solar TI Feeds Agent;
- Учетные данные для доступа к Kaspersky Cybertrace;
- Доступ к серверу TI Feeds с действительным JWT-токеном.
Конфигурация интеграции
Данная интеграция автоматизирует выгрузку индикаторов компрометации из Solar TI Feeds в Kaspersky Cybertrace. Для каждого потока данных (фида) угроз создается отдельный пайплайн обработки, обеспечивающий получение, преобразование и загрузку данных.
Для подключения к СЗИ используется аутентификация типа Basic.
Переменные окружения
Для работы интеграции необходимо определить следующие переменные окружения:
Переменные для интеграции с Kaspersky Cybertrace
- TIC_AGENT_SERVICE_HOST - Хост или IP-адрес сервера Kaspersky Cybertrace
- TIC_AGENT_SERVICE_PORT - Порт для подключения к API Kaspersky Cybertrace
- TIC_AGENT_SERVICE_USER - Имя пользователя для аутентификации в Kaspersky Cybertrace
- TIC_AGENT_SERVICE_PASSWORD - Пароль для аутентификации в Kaspersky Cybertrace
Структура пайплайнов для Cybertrace
Каждый пайплайн состоит из следующих компонентов:
- FeedStreamGenerator — получает индикаторы из Solar TI Feeds.
- IndicatorsTextMap — преобразует данные в текстовый формат, пригодный для загрузки.
- IndicatorsTextSink — сохраняет данные в CSV-файл и загружает их в Kaspersky Cybertrace.
Конфигурация автоматически создает отдельный пайплайн для каждого фида из списка feedsList. При необходимости вы можете изменить этот список, указав только нужные фиды.
Пример настройки списка фидов:
local feedsList = List(
"c2",
"botnet",
"stealer",
"ransomware",
"cryptomining",
"apt",
"phishing",
"active_c2",
"honeypot_attacker",
"honeypot_payload",
"intrusion"
)
Справочник параметров для Kaspersky Cybertrace
Ключевые параметры конфигурации для Cybertrace приведены в таблице:
| Параметр | Тип данных | Значение по умолчанию | Обязательность | Описание | Пример |
|---|---|---|---|---|---|
| credentials | Credentials | Да | Данные для аутентификации | credentials = new agent.Basic {username = cyberTraceUser password = cyberTracePassword} | |
| address | Address | Да | Данные подключения | address {host = cyberTraceHost port = cyberTracePort insecureSkipVerify = true scheme = "https"} | |
| timeout | Duration | 30.s | Нет | Таймаут запросов | 60.s |
| listName | String | Да | Имя списка для загрузки данных | “4rays_feeds” |
Дополнительные параметры конфигурации для расширения ServiceConfig – CyberTraceCfg
| Параметр | Тип данных | Значение по умолчанию | Обязательность | Описание |
|---|---|---|---|---|
| batchSize | Int | 100 | Нет | Размер батча для загрузки в Cybertrace |
| enableBinaryErrorSearch | Boolean | false | Нет | Включение режима бинарного поиска ошибок загрузки, используется для отладки |
| confidence | Int | 0 | Нет | Уровень доверия к индикаторам |
| retention | Duration | 1.min | Нет | Время жизни загружаемых индикаторов |
| enableValidationIndicators | Boolean | false | Нет | Включение режима валидации индикаторов на уровне агента перед загрузкой в Cybertrace, возможна потеря данных |
Полный пример конфигурационного файла для интеграции с Cybertrace
amends "package://pkg.pkl-lang.org/github.com/pipelane/pipelaner/pipelaner@1.3.1#/Pipelaner.pkl"
import "package://pkg.pkl-lang.org/github.com/pipelane/pipelaner/pipelaner@1.3.1#/source/Components.pkl"
import "../agent.pkl"
import "../templates.pkl"
local feedsList = templates.allFeedsList
pipelines = feedsList.map((f) -> new Components.Pipeline{
name = f + "-pipeline"
inputs {
new agent.FeedStreamGenerator {
name = f + "-generator"
filter = new agent.IndicatorRequestParams {
types = List("ipv4-addr", "domain-name", "url", "md5-hash", "sha1-hash", "sha256-hash")
actions = templates.allActionsList
fields = List("action", "value", "indicator_type", "description", "relations", "rules", "feeds", "zone")
feedNames = List(f)
}
server = templates.serverEnvCfg
schedule = templates.scheduleCron5MinCfg
sqlite = templates.sqliteEnvCfg
}
}
transforms {
new agent.IndicatorsTextMap {
name = f + "-map"
inputs {
f + "-generator"
}
fieldsMap {
["action"] = "Action"
["value"] = "normalizeValue(IndicatorType, Value)"
["indicator_type"] = "IndicatorType"
["first_seen"] = """
formatUnixTime(FirstSeen, "DateTime")
"""
["last_seen"] = """
formatUnixTime(LastSeen, "DateTime")
"""
["description"] = "Description"
["reports"] = """
let reports = map(Relations, {#.ObjectType == "report" ? #.ObjectValue : ""});
join(filter(reports, {# != ""}), ",")
"""
["threat_actors"] = """
let actors = map(Relations, {#.ObjectType == "threat-actor" ? #.ObjectValue : ""});
join(filter(actors, {# != ""}), ",")
"""
["malware"] = """
let malware = map(Relations, {#.ObjectType == "malware" ? #.ObjectValue : ""});
join(filter(malware, {# != ""}), ",")
"""
["tools"] = """
let tools = map(Relations, {#.ObjectType == "tool" ? #.ObjectValue: ""});
join(filter(tools, {# != ""}), ",")
"""
["indicators"] = """
let indicators = map(Relations, let x = #; x.ObjectType == "indicator" ? x.IndicatorType +":" + x.ObjectValue : "");
join(filter(indicators, {# != ""}), ",")
"""
["files"] = """
let files = map(Relations, let x = #; x.ObjectType == "file" ? x.ObjectValue : "");
join(filter(files, {# != ""}), ",")
"""
["external_references"] = """
join(ExternalReferences, "\\n")
"""
["rules"] = """
join(Rules, ",")
"""
["categories"] = """
join(Categories, ",")
"""
["feeds"] = """
join(Feeds, ",")
"""
["zone"] = "Zone"
}
}
}
sinks {
new agent.IndicatorsTextSink {
name = f + "-sink"
inputs {
f + "-map"
}
writer {
outputDirectory = templates.outputDirEnv
outputFileName = f + ".csv"
writeMode = "rolling"
fileFormat = "csv"
writeHeaders = true
separator = ";"
allQuotes = true
}
sqlite = templates.sqliteEnvCfg
service = new agent.CyberTraceCfg {
batchSize = 1_000
address {
host = templates.externalServiceHostEnv
port = templates.externalServicePortEnv
insecureSkipVerify = true
scheme = "https"
}
credentials = new agent.Basic {
username = templates.externalServiceUserEnv
password = templates.externalServicePasswordEnv
}
timeout = 120.s
listName = "4rays_" + f + "_list"
confidence = 80
retention = 525600.min
enableBinaryErrorSearch = true
}
}
}
}).toListing()
settings = templates.baseSettings
Мониторинг результатов работы интеграции
После запуска агента убедитесь в корректности работы интеграции:
- Проверка файлов результатов: Убедитесь, что в рабочей директории (TIC_AGENT_OUTPUT_DIR) создаются CSV-файлы с именами соответствующих фидов.
- Анализ логов: Проверьте логи агента в директории TIC_AGENT_LOG_DIR на наличие ошибок или предупреждений.
- Верификация в Cybertrace: В интерфейсе Kaspersky Cybertrace убедитесь, что созданы списки индикаторов с префиксом 4rays_ и что они содержат актуальные данные.